package kr.pe.johnkim.checkmileage.mobile.rest.dao;

import kr.pe.johnkim.checkmileage.mobile.domain.CheckMileageMember;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

/**
 * Check Mileage 사용자 관련 DAO 메소드들을 구현하는 클래스 이다.
 *
 * @author : johnkim <cale9797@gmail.com / Bettersoft, Inc.>
 * @Date : 12. 7. 24
 */
public class CheckMileageMemberDaoImpl extends SqlMapClientDaoSupport implements CheckMileageMemberDao {

    // SLF4J Logging
	private Logger logger = LoggerFactory.getLogger(CheckMileageMemberDaoImpl.class);

    /**
     * 아이디로 기존에 등록된 사용자가 있는지 확인 한다.
     *
     * @param checkMileageMember
     * @return
     */
    @Override
    public CheckMileageMember selectMemberExist(CheckMileageMember checkMileageMember) {
        logger.info("selectMemberExist");

        return (CheckMileageMember)getSqlMapClientTemplate().queryForObject("CHECKMILEAGE_MEMBERS.selectMemberExist", checkMileageMember);
    }

    /**
     * 사용자를 등록 한다.
     *
     * @param checkMileageMember
     */
    @Override
    public void registerMember(CheckMileageMember checkMileageMember) {
        logger.info("registerMember");

        getSqlMapClientTemplate().insert("CHECKMILEAGE_MEMBERS.registerMember", checkMileageMember);
    }

    /**
     * 사용자 정보를 가져 온다.
     *
     * @param checkMileageMember
     * @return
     */
    @Override
    public CheckMileageMember selectMemberInformation(CheckMileageMember checkMileageMember) {
        logger.info("selectMemberInformation");

        return (CheckMileageMember)getSqlMapClientTemplate().queryForObject("CHECKMILEAGE_MEMBERS.selectMemberInformation", checkMileageMember);
    }

    /**
     * 사용자 정보를 수정 한다.
     *
     * @param checkMileageMember
     */
    @Override
    public void updateMemberInformation(CheckMileageMember checkMileageMember) {
        logger.info("updateMemberInformation");

        getSqlMapClientTemplate().update("CHECKMILEAGE_MEMBERS.updateMemberInformation", checkMileageMember);
    }

    /**
     * 사용자를 비활성화 한다.
     *
     * @param checkMileageMember
     */
    @Override
    public void updateDeactivateMember(CheckMileageMember checkMileageMember) {
        logger.info("updateDeactivateMember");

        getSqlMapClientTemplate().update("CHECKMILEAGE_MEMBERS.updateDeactivateMember", checkMileageMember);
    }

    /**
     * 사용자의 Google GCM Registration Id / APNS Device Token 을 수정 한다.
     *
     * @param checkMileageMember
     */
    @Override
    public void updateRegistrationId(CheckMileageMember checkMileageMember) {
        logger.info("updateRegistrationId");

        getSqlMapClientTemplate().update("CHECKMILEAGE_MEMBERS.updateRegistrationId", checkMileageMember);
    }

    /**
     * Push Notification 수신 여부를 수정 한다.
     *
     * @param checkMileageMember
     */
    @Override
    public void updateReceiveNotification(CheckMileageMember checkMileageMember) {
        logger.info("updateReceiveNotification");

        getSqlMapClientTemplate().update("CHECKMILEAGE_MEMBERS.updateReceiveNotification", checkMileageMember);
    }

    /**
     * 사용자 위치 정보를 수정 한다.
     *
     * @param checkMileageMember
     */
    @Override
    public void updateMemberLocation(CheckMileageMember checkMileageMember) {
        logger.info("updateMemberLocation");

        getSqlMapClientTemplate().update("CHECKMILEAGE_MEMBERS.updateMemberLocation", checkMileageMember);
    }

    /**
     * 전화번호로 기존 사용자가 있는지 확인 한다.
     *
     * @param checkMileageMember
     * @return
     */
    @Override
    public CheckMileageMember selectMemberExistByPhoneNumber(CheckMileageMember checkMileageMember) {
        logger.info("selectMemberExistByPhoneNumber");

        return (CheckMileageMember)getSqlMapClientTemplate().queryForObject("CHECKMILEAGE_MEMBERS.selectMemberExistByPhoneNumber", checkMileageMember);
    }

    /**
     * 전화번호로 기존 사용자 정보를 가져 온다.
     *
     * @param checkMileageMember
     * @return
     */
    @Override
    public CheckMileageMember selectMemberInformationByPhoneNumber(CheckMileageMember checkMileageMember) {
        logger.info("selectMemberInformationByPhoneNumber");

        return (CheckMileageMember)getSqlMapClientTemplate().queryForObject("CHECKMILEAGE_MEMBERS.selectMemberInformationByPhoneNumber", checkMileageMember);
    }
}
